package com.example.demo;

import java.util.*;

public class Demo {

    public static void main(String[] args) {
//        //编写一个函数，计算字符串中含有的不同字符的个数
//        Scanner scanner=new Scanner(System.in);
//        String line=scanner.nextLine();
//        //一共有128个字符。字需要用128位
//        BitSet bitSet= new BitSet(128);
//        for (char c : line.toCharArray()) {
//            //判断字符c是否已经出现
//            if (!bitSet.get(c)){
//                bitSet.set(c);
//            }
//        }
//        //统计有多少字符出现过
//        System.out.println(bitSet.cardinality());

        //输入一行字符，分别统计出包含英文字母、空格、数字和其它字符的个数
        /*
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            //英文，数字，空格，其他字符的个数
            int isLetter=0,isDigit=0,isWhitespace=0,isQt=0;
            char[] chars=scanner.nextLine().toCharArray();
            for (int i = 0; i < chars.length; i++) {
                char a=chars[i];
                if (Character.isLetter(a)){
                    isLetter++;
                }else if (Character.isDigit(a)){
                    isDigit++;
                }else if (Character.isWhitespace(a)){
                    isWhitespace++;
                }else{
                    isQt++;
                }
            }
            System.out.println(isLetter);
            System.out.println(isDigit);
            System.out.println(isWhitespace);
            System.out.println(isQt);
        }
        scanner.close();*/

        /*//输入n个整数，输出其中最小的k个。
        //本题有多组输入样例，请使用循环读入，比如while(cin>>)等方式处理
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            int n=scanner.nextInt();
            int num=scanner.nextInt();
            int[] a=new int[n];
            for (int i = 0; i <n; i++) {
                a[i]=scanner.nextInt();
            }
            Arrays.sort(a);
            for (int i = 0; i < num; i++) {
                System.out.println(a[i]+"  ");
            }
            System.out.println();
        }*/

       /* //统计大写字母的个数
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            //^[A-Z] 匹配以大写字母开头的字符串
            //[^A-Z] 表示与不包含大写字母的字符匹配
            String ds=scanner.nextLine().replaceAll("[^A-Z]","");
            System.out.println(ds.length());
        }*/

        //根据输入的日期，计算是这一年的第几天
        /*Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            int year=scanner.nextInt();
            int month=scanner.nextInt();
            int day=scanner.nextInt();
            int[] month_day={31,28,31,30,31,30,31,31,30,31,30,31};
            int sum=0;
            for (int i = 0; i < month-1; i++) {
                sum+=month_day[i];
            }
            sum+=day;
            if (month>2 && is_leap(year)){
                sum+=1;
            }
            System.out.println(sum);
        }*/

//        //整数反转
//        System.out.println(reserve(1234));

        //编写一个函数，计算字符串中含有的不同字符的最大长度
        System.out.println(lengthOfLongestSubstring("ddddd"));
    }


    //整数反转
    public static int reserve(int x){
        long n=0;
        while (x !=0){
            n=n*10+x%10;
            x=x/10;
        }
        return (int) n==n ? (int) n :0;
    }

    //判断是否闰年
    public static boolean is_leap(int n){
        if (n%4==0 && n%100==0 || n%400==0){
            return true;
        }else{
            return false;
        }
    }

    public static int lengthOfLongestSubstring(String s){
        //记录字符上一次出现的位置
        int[] last=new int[128];
        for (int i = 0; i < 128; i++) {
            last[i] = -1;
        }
        int n=s.length();

        int res=0;
        int start=0;
        for (int i = 0; i < n; i++) {
            int index=s.charAt(i);
            start=Math.max(start,last[index]+1);
            res=Math.max(res,i-start+1);
            last[index]=i;
        }
        return res;
    }
}
